/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarCambioCarrera;

import web.util.Constantes;
import entidad.Parametro;
import entidad.Persona;
import wasolicitudesfiec.CambioCarreraoEspecializacion.VolverASolicitar;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import hero.interfaces.BnNodeValue;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.*;

/**
 *
 * @author Administrador
 */
public class CTRL_VolverASolicitar extends CTRL_Base {

    private VolverASolicitar gui;
    private String nombreActividad = Constantes.SolicitarCambio.volverASolicitar;
    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarCambioCarrera;

    public CTRL_VolverASolicitar(VolverASolicitar gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudcambiocarrera solicitudCambio;
       try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitudCambio = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
            gui.getStResultado().setText("Su solicitud ha sido observada y devuelta por el Subdecano de la Facultad.");

            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.getDetalleDetalleSolicitarCambio().getLblCarreraActual().setText(solicitudCambio.getCarreraActual().getNombre());
            gui.getDetalleDetalleSolicitarCambio().getLblCarreraNueva().setText(solicitudCambio.getCarreraNueva().getNombre());
            gui.getDetalleDetalleSolicitarCambio().getLblNombreEstudiante().setText(solicitudCambio.getEstudiante().getPersona().toString());
            gui.getDetalleDetalleSolicitarCambio().getLblNumMatricula().setText(solicitudCambio.getEstudiante().getMatricula());
            if (solicitudCambio.getObservacionEstudiante() != null) {
                gui.getDetalleDetalleSolicitarCambio().getTxtaComentariosEstudiante().setValue(solicitudCambio.getObservacionEstudiante());
            } else {
                gui.getDetalleDetalleSolicitarCambio().getTxtaComentariosEstudiante().setValue(Constantes.Mensajes.noComentarios);
            }
            if (solicitudCambio.getFkIdProfesor() != 0) {
                gui.getPanelInforme().setRendered(true);
                gui.getLblInforme().setText(solicitudCambio.getInforme());
                gui.getLblNombreProfesor().setText(solicitudCambio.getProfesor().getPersona().toString());
                if (solicitudCambio.getObservacionCoordinador() != null) {
                    gui.getTxtaComentarioProfesor().setValue(solicitudCambio.getObservacionCoordinador());
                } else {
                    gui.getTxtaComentarioProfesor().setValue(Constantes.Mensajes.noComentarios);
                }
            } else {
                gui.getPanelInforme().setRendered(false);
            }
            if (solicitudCambio.getObservacionSubDecano() != null) {
                gui.getTxtaComentarioSubDecano().setValue(solicitudCambio.getObservacionSubDecano());
            } else {
                gui.getTxtaComentarioSubDecano().setValue(Constantes.Mensajes.noComentarios);
            }
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, exception);

            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }

    public void volverAsolicitar(boolean volverASolicitar) throws MensajeException {
        BnNodeValue actividad;
        String nombreInstanciaProceso;
        Solicitudcambiocarrera solicitud;

        try {
            nombreInstanciaProceso = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstanciaProceso);
            actividad = usrSession.getNode(nombreInstanciaProceso, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt(prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogCambioCarrera().leerSolicitudCambio(idSolicitud);
            if (volverASolicitar) {
                prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.decisionVolverASolicitar, Constantes.Atributo.DecisionVolverASolicitar.Reiniciar.toString());
            } else {
                prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.decisionVolverASolicitar, Constantes.Atributo.DecisionVolverASolicitar.Finalizar.toString());
                solicitud.setEstado(Constantes.EstadoSolicitud.Terminada.toString());
            }           
            solicitud = logica.getLogCambioCarrera().guardarYClonarSolicitudCambio(solicitud);
             prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudCambioCarrera() + "");

            usrSession.startActivity(nombreInstanciaProceso, nombreActividad);
            usrSession.terminateActivity(nombreInstanciaProceso, nombreActividad);

        } catch (MensajeException exception) {
            throw exception;
        } catch (Exception exception) {
            exception.printStackTrace();
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }

    }
}
